Я пытаюсь заставить Assetic работать в Symfony 2.0.11, чтобы использовать sass для css-файлов.
Я часами возился с этой проблемой, и, насколько я понял, текущая версия актива (1.0.2) испорчена и просто не может работать в Windows.
Я попытался обновить assets и assetsBundle до последней версии Master с github, но для этого требуется Symfony 2.1, который вносит множество изменений и не имеет обратной совместимости (не говоря уже о том, что он официально не выпущен), так что это не вариант.
Этот пост Компрессор yui symfony2 assets для Windows (синтаксис пути)дает некоторое представление по этому вопросу, но, к сожалению, изменений в библиотеке активов, которые он рекомендует, недостаточно, чтобы заставить его работать должным образом в моем окружающая обстановка.
Я также нашел некоторые интересные фрагменты в https://github.com/kriswallsmith/assetic/commit/5621cd449b0d85316e5872d672e7e900edc2246cи https://github.com/kriswallsmith/assetic/issues/25
В конце концов, я знаю, что мне нужно изменить vendor/assetic/src/Assetic/Util/ProcessBuilder.php, возможно, некоторые другие файлы в пакете и, возможно, добавить некоторую информацию в мой файл config.yml ( кажется, может помочь добавление пути к java или sass).
Что мне нужно, так это чтобы кто-то, кто смог получить работающую конфигурацию, дал мне указания на то, что мне не хватает, или, в идеале, шаги, необходимые для того, чтобы эта чертова штука заработала.
Кто-нибудь справится?
_____Обновление: Все еще копаю, прошло всего 3 дня :/
Новые элементы:
1/ php5.3.8 может иметь проблему с proc_open и данными > 2048 байт согласно https://bugs.php.net /bug.php?id=60120 Эта проблема может иметь последствия при получении symfony из репозитория git (https://github.com/symfony/symfony/issues/3216). выдача «git config --global core.autocrlf input» и повторная загрузка всего из git позволили мне использовать php5.3.10 без сбоев.
2/ https://github.com/kriswallsmith/assetic/commit/5621cd449b0d85316e5872d672e7e900edc2246cвыглядит как достойная основа. Я внес некоторые незначительные изменения в пути в Process.php (см. https://github.com/kriswallsmith/assetic/issues/92), но я не совсем уверен, что это актуально. Во всяком случае, командная строка, которую я получаю от Assetic, работает в оболочке и выводит ожидаемый css.
3/ sass.bat (расположенный в Ruby193\bin) должен иметь абсолютный путь к ruby.exe, чтобы идти дальше (я узнал, что на собственном горьком опыте вы видите сообщение об ошибке, только если вы var_dump и kill скрипт в нужном месте!)
Теперь все выглядит немного лучше, но все еще не работает с sass (думаю, с некоторыми другими фильтрами все будет хорошо) Мне удалось изолировать проблему в Process.php (около строки 172) в «$data = fread($pipe, 8192);» : Второй раз, когда скрипт проходит в этом месте, когда $pipe указывает на второй ресурс, он никогда не возвращается ... и php зависает, и у него действительно тяжелые времена (мне нужно убить / перезапустить wamp по крайней мере два раза, чтобы быть в состоянии сделать еще один тест)
Я действительно не знаком с proc_open и потоками, и мне трудно понять, что код пытается там сделать...
Я надеюсь, что это может помочь следующему, кто попытается чтобы все работало и, в конечном итоге, помогло и моему делу. Все еще ищу поддержку по этому вопросу!
_____Обновление:
Дальнейшее тестирование помогло мне понять, что у меня может работать "php app/console assets:dump", когда файл sass достаточно мал.Мне кажется, что фактические правила css (исключая определения переменных и примеси) должны занимать меньше 4096 байт с php5.3.10, и даже меньше с php 5.3.8. Это указывает на ошибку proc_open, описанную в https://bugs.php.net/bug.php?id=60120и https://bugs.php.net/bug.php?id=51800
_____Обновление:
Я попытался установить php5.4, чтобы проверить, решает ли он проблему. . Мне потребовалось некоторое время, чтобы понять, почему эта версия не работает на моем компьютере, потому что еще нет сборки x64. Затем я установил 32-битную версию wamp и легко с ней работал php5.4. Конечный результат: proc_open все еще висит :( У меня заканчиваются идеи...
Итак, в конце концов я заставил это работать и решил попытаться суммировать наиболее важные шаги для более поздних зрителей:
проверьте http://rubyinstaller.org/downloads/
Обновите компас до 0.12 с помощью
"gem update --system"
, а затем
"gem install compass"
Перейдите в Ruby193\lib\ruby\gems\1.9.1\gems\compass-0.12.0\lib\compass в строке 10 замените
self.from, self.to = File.expand_path(from), to
на
self.from, self.to = from.gsub('./', ''), to
/!\ с какой-то настройкой, может быть и наоборот, но с настройкой, которую я пытаюсь описать, дело обстоит так.
отредактируйте файл deps следующим образом:
[assetic]
git=http://github.com/kriswallsmith/assetic.git
;version=v1.0.2
version=ac71449e46bed22c276da26bf54ab2f733b3801d
[AsseticBundle]
git=http://github.com/symfony/AsseticBundle.git
target=/bundles/Symfony/Bundle/AsseticBundle
;version=v1.0.1
version=da4a46ce37557dcf3068b8493b12bdbbe47455e2
/!\ вам нужно удалить ссылки на конкретную версию в файле deps. заблокировать файл тоже!
и выполните "установку php bin/vendors".
вот как сейчас выглядит мой:
# Assetic Configuration
assetic:
debug: %kernel.debug%
use_controller: false
# java: /usr/bin/java
filters:
compass:
bin: e:\outils\Ruby193\bin\compass.bat
Перейдите в каталог Ruby193\bin и отредактируйте компас. bat, чтобы установить абсолютный путь к ruby.exe (сделайте то же самое с sass.bat, пока вы это делаете)
Вот как сейчас выглядит мой:
{% stylesheets filter='compass' output='css/*.css'
'@LndBimBundle/Resources/public/css/main.scss'
%}
{% endstylesheets %}
Для тестирования вы можете использовать
php app/console assetic:dump --verbose --no-debug
Таким образом, если вы попадете в бесконечный цикл, как я, вы можете просто нажать Ctrl+ C, что делает тестирование более эффективным, чем в браузере
/!\ Вам абсолютно необходимо использовать --no-debug, иначе вы получите кучу нежелательных строк в вашем css, которые выглядят так:
@media -sass-debug-info{filename{font-family:file\:\/\/C\:\/Users\/Mattso\/AppData\/Local\/Temp\/ass9DBF\.tmp\.scss}line{font-family:\0000359}}
Вы можете использовать
die($this->commandline);
в методе запуска
vendor\assetic\src\Assetic\Util\Process.php
, чтобы показать вам текущую командную строку и протестировать ее.
Мой в настоящее время выглядит так:
cmd /V:ON /E:ON /C ""e:\outils\Ruby193\bin\compass.bat" "compile" "C:\Users\Mattso\AppData\Local\Temp" "--config" "C:\Users\Mattso\AppData\Local\Temp\ass59BB.tmp" "--sass-dir" "" "--css-dir" "" "C:\Users\Mattso\AppData\Local\Temp\ass59BC.tmp.scss""
Затем вам просто нужно ввести "php app/console assetsic:dump --no-debug" в вашем cli, чтобы создать файлы css в web\css и обновить страницу вашего сайта. И вуаля! (надеюсь!)
Примечание. Как вы могли заметить, я использую CompassFilter вместо SassFilter. Это потому, что он делает то же самое (и даже больше) и его можно заставить делать то, что мы от него ожидаем. Если кто-нибудь сможет узнать, как починить SassFilter, это будет здорово. Между тем я уже слишком много времени потратил на это.
Я несколько дней таскал себя за волосы из-за этого сумасшествия, надеюсь, этот пост будет полезен для психического здоровья некоторых других людей ;)